import Vue from 'vue'
import App from './App.vue'
import router from './router'
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';

Vue.use(ElementUI);

// 引入axios
import axios from 'axios'

//请求拦截器
//用axios拦截器给每个请求都加上请求头
axios.interceptors.request.use(
  config => {
    //把jwt拼到请求头中
    let jwt = localStorage.getItem("authorization")
    if (jwt) {
      config.headers.authorization = jwt
    }
    return config;
  }
)

//响应拦截器
axios.interceptors.response.use(
  response => {
    // 检查后端返回的code是否为2002，若是则处理为错误
    if (response.data.code === 2002) {
      // 清除本地存储的Token
      localStorage.removeItem('authorization');
      // 重定向到登录页面
      router.replace({
        path: '/login',
        query: { redirect: router.currentRoute.fullPath } // 登录后跳回当前页面
      });
      // 这里需要正确调用消息提示，不能使用 this
      Vue.prototype.$message.error('Token失效，需重新登录');
      // return Promise.reject(new Error('Token失效，需重新登录')); // 手动触发错误
    }
    return response;
  },
  error => {
    // 错误处理
    if (error.response) {
      // 可以根据状态码统一处理不同类型的错误
      switch (error.response.data.code) {
        case 2002:
          // 未授权，通常是Token失效，跳转到登录页
          // 清除本地存储的Token
          localStorage.removeItem('authorization');
          // 重定向到登录页面
          router.replace({
            path: '/login',
            query: { redirect: router.currentRoute.fullPath } // 登录后跳回当前页面
          });
          break;
      }
    }
    return Promise.reject(error.response.data);//返回接口错误信息
  }
);




Vue.prototype.$axios = axios  //把axios配到vue原型中，所有组件都可以使用

Vue.config.productionTip = false



new Vue({
  router,
  render: h => h(App)
}).$mount('#app')